import os
import re
import uuid
import unicodedata
from config.settings import ALLOWED_EXTENSIONS

def allowed_file(filename):
    """
    检查文件扩展名是否在允许的列表中
    """
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

def secure_filename_with_chinese(filename):
    """
    自定义安全文件名函数，支持中文
    """
    # 保留原始扩展名
    name, ext = os.path.splitext(filename)
    
    # 替换不安全字符，但保留中文和英文字母数字
    # 移除ASCII控制字符
    name = re.sub(r'[\x00-\x1f\\/*?:"<>|]', '', name)
    
    # 规范化Unicode字符
    name = unicodedata.normalize('NFC', name)
    
    # 确保文件名不为空
    if not name:
        name = 'unnamed'
    
    # 限制文件名长度
    if len(name) > 100:
        name = name[:100]
    
    return name + ext

def generate_unique_filename(filename):
    """
    生成带有UUID前缀的唯一文件名
    """
    secure_name = secure_filename_with_chinese(filename)
    return f"{uuid.uuid4()}_{secure_name}"

def get_file_extension(filename):
    """
    获取文件扩展名，如果没有扩展名则尝试从原始文件名中推断
    """
    if '.' in filename:
        return filename.rsplit('.', 1)[1].lower()
    
    # 尝试从原始文件名中推断扩展名
    for ext in ALLOWED_EXTENSIONS:
        if filename.lower().endswith(f'.{ext}'):
            return ext
    
    return None

def get_name_without_extension(filename):
    """
    获取不带扩展名的文件名
    """
    return os.path.splitext(filename)[0]